import { sysLogin } from '@/api/login'
import { sysProfile, sysUser } from '@/api/user'
import router from '@/router'
import { asyncRoutes, constantRoutes, resetRouter } from '@/router'

export default {
  namespaced: true,
  state: {
    token: '', // token
    userInfo: '' // 用户信息
  },
  mutations: {
    setToken(state, value) {
      state.token = value
    },
    setUserInfo(state, value) {
      state.userInfo = value
    },
    // 退出处理
    logout(state) {
      state.token = ''
      state.userInfo = ''
      // 重置路由
      resetRouter()
      router.push('/login?back=' + location.href.split('#')[1])
    }
  },
  actions: {
    // 登录处理
    async toLogin({ commit }, form) {
      const res = await sysLogin(form)
      commit('setToken', res.data.data)
      // console.log(3)
    },
    // 获取用户信息
    async getUserInfo({ commit, state }) {
      // if (!state.userInfo.userId) {
      // 调用接口获取用户信息
      const res = await sysProfile()
      // 获取员工头像等信息
      const res2 = await sysUser(res.data.data.userId)

      /*
      合并对象
        {...a,...b}
       返回合并后对象= Object.assign({},a,b,c,d)
      */
      // console.log('res2', res2)

      // 用户信息存储
      // commit('setUserInfo', { ...res.data.data, ...res2.data.data })
      const res3 = Object.assign({}, res.data.data, res2.data.data)
      commit('setUserInfo', res3)
      console.log('res3', res3)
      // 权限点数据：res3.roles.menus  ['employees']
      // 动态路由：asyncRoutes
      // 匹配：判断asyncRoutes 每一项内的meta.name是否在权限点数据存在
      const newArr = asyncRoutes.filter((item) => {
        return res3.roles.menus.includes(item.meta.name)
      })
      // 添加：router有一个方法叫addRoutes(需要添加的路由)
      newArr.push({ path: '*', redirect: '/404', hidden: true })
      // 在以前的路由routes数据基础上的添加
      router.addRoutes(newArr)
      // 修改routes模块的数据：调用routes模块的mutations方法来修改
      // user模块的actions调用routes模块的mutations
      // commit('模块名/方法名',实参,{root:true})
      commit('routes/setRoutes', [...constantRoutes, ...newArr], { root: true })

      //
      /*
      坑点1：通过addRoutes添加的路由并不能立马使用，它需要再经历一次导航守卫才可使用
      解决：next(to.fullPath)
      坑点2：静态路由中的404重定向匹配影响路由跳转，动态路由还没生效它就匹配跳转了
      解决：静态路由中删除404重定向匹配，通过addRoutes添加404重定向
      */
      console.log('newArr', newArr)
      // console.log('用户信息', res)
      // }
    }
  },
  getters: {}
}
